<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JavaScript流程控制</title>
  <style>
    .row {
      width: 500px;
      font-size: 0;
    }

    span {
      width: 50px;
      height: 50px;
      display: inline-block;
    }
  </style>
</head>

<body>
  <script>
    /* for (var i = 1; i <= 5; i++) {
      document.write('<div class="row">')
      if (i % 2 === 0) {
        for (var j = 1; j <= 5; j++) {
          if (j % 2 === 0) {
            document.write('<span style="background:#000"></span>')
          } else {
            document.write('<span style="background:#fff"></span>')
          }
        }
      } else {
        for (var j = 1; j <= 5; j++) {
          if (j % 2 === 0) {
            document.write('<span style="background:#fff"></span>')
          } else {
            document.write('<span style="background:#000"></span>')
          }
        }
      }
      document.write('</div>')
    } */

    // 答案
    document.write('<table cellspacing=0 style="width:300px;height:300px">')
    for (var i = 0; i < 5; i++) {
      document.write('<tr>')
      for (var j = 0; j < 5; j++) {
        if (i % 2 == 0 && j % 2 == 0 || i % 2 != 0 && j % 2 != 0) {
          document.write('<td style="background: #000"></td>')
        } else {
          document.write('<td></td>')
        }
      }
      document.write('</tr>')
    }
    document.write('</table>')


    // 2.在控制台中用循环输出 0 0.2 0.4 0.6 0.8 1
    /* for (var i = 0; i <= 5; i++) {
      // if (i % 2 === 0) {
        console.log(i / 5);
      // }
    } */

    // 答案
    /* for (var i = 0; i <= 10; i++) {
      if (i % 2 === 0) {
        console.log(i / 10);
      }
    } */

    // 4.循环输出1-100 里的奇数
    /* for (var i = 1; i <= 100; i++) {
      if (i % 2 === 1) {
        console.log(i);
      }
    } */

    // 5.有一座桥，当你身上所拥有的钱大于 30000 时，每过一次桥则需要支付 3000 元。当你身上的钱小于或等于 30000 时，每过一次桥则需要支付你身上 10%的钱。已知有一个人身上有 33000 元，问此人能过这座桥多少次之后，身上的钱会少于 100 块?
    /* var money = 33000;
    var time = 0;
    while (money > 30000) {
      money -= 3000;
      time++;
    }
    while (money <= 30000) {
      money -= money * 0.1;
      time++;
      if(money<100){
        break;
      }
    }
    console.log(`此人能过这座桥${time}次之后，身上的钱会少于 100 块`);
    */

    // 答案
    /* var money = 33000;
    var count = 0;
    while(money >= 100){
      if(money>30000){
        money -= 3000;
        count++;
      }else{
        money *=0.9;
        count++;
      }
    }
    console.log(`此人能过这座桥${count}次之后，身上的钱会少于 100 块`); */

    // 6.小明去存 1000 钱，每天会产生 1%的利息，求问，30 天后，小明可以拿回多少钱
    /* var money = 1000;
    for (var i = 1; i <= 30; i++) {
      money += 1000 * 0.01;
    }
    console.log(`30天后，小明可以拿回${money}块钱`); */

    // 7.有一分数序列：2/1，3/2，5/3，8/5，13/8，21/13...求出这个数列的前20项之和。(程序分析：请抓住分子与分母的变化规律。)
    // 答案
    /* var sum = 0;
    var fz = 2;
    var fm = 1;
    for (var i = 1; i <= 20; i++) {
      var res = fz / fm;
      var c = fz;
      fz = c + fm;
      fm = c;
      sum += res;
    }
    console.log('前20项之和为：' + sum); */

    // 8.求1000以内所有的水仙花数（水仙花数：是指一个三位数，每个位数上数字的3次幂之和等于数字它本身 例如：153）
    /* for (var i = 100; i <= 1000; i++) {
      var a = parseInt(i / 100 % 10);
      var b = parseInt(i / 10 % 10);
      var c = parseInt(i % 10);
      if (i == a * a * a + b * b * b + c * c * c) {
        console.log(i);
      }
    } */




  </script>

  <script>
    /*
      1.请写出javascript的三种循环
      (1)while循环：while(条件){循环的代码/循环体}
      (2)do ...while循环：do{code}while(条件)
      (3)for循环：for(定义初始变量; 条件判断; 步长){代码}

      2.在控制台中用循环输出 0 0.2 0.4 0.6 0.8 1
      for (var i = 0; i <= 10; i++) {
        if(i % 2 === 0){
          console.log(i/10);
        }
      }

      3.请写出break和continue作用和区别
      break：直接结束整个循环。
      continue：跳过当前的循环，继续下一次循环

      4.循环输出1-100 里的奇数
      for (var i = 1; i <= 100; i++) {
        if (i % 2 === 1) {
          console.log(i);
        }
      }

      5.有一座桥，当你身上所拥有的钱大于 30000 时，每过一次桥则需要支付 3000 元。当你身上的钱小于或等于 30000 时，每过一次桥则需要支付你身上 10%的钱。已知有一个人身上有 33000 元，问此人能过这座桥多少次之后，身上的钱会少于 100 块?
      var money = 33000;
      var time = 0;

      while (money > 30000) {
        money -= 3000;
        time++;
      }
      while (money <= 30000) {
        money -= money * 0.1;
        time++;
        if(money<100){
          break;
        }
      }
      
      console.log(`此人能过这座桥${time}次之后，身上的钱会少于 100 块`);

      6.小明去存 1000 钱，每天会产生 1%的利息，求问，30 天后，小明可以拿回多少钱
      var money = 1000;
      for (var i = 1; i <= 30; i++){
        money += 1000*0.01;
      }
      console.log(`30天后，小明可以拿回${money}块钱`);

      7.有一分数序列：2/1，3/2，5/3，8/5，13/8，21/13...求出这个数列的前20项之和。(程序分析：请抓住分子与分母的变化规律。)
      // 答案
      var sum = 0;
      var fz = 2;
      var fm = 1;
      for (var i = 1; i <= 20; i++) {
        var res = fz / fm;
        var c = fz;
        fz = c + fm;
        fm = c;
        sum += res;
      }
      console.log('前20项之和为：' + sum);

      8.求1000以内所有的水仙花数（水仙花数：是指一个三位数，每个位数上数字的3次幂之和等于数字它本身 例如：153）
      // 答案
      for (var i = 100; i <= 1000; i++) {
        var a = parseInt(i / 100 % 10);
        var b = parseInt(i / 10 % 10);
        var c = parseInt(i % 10);
        if (i == a * a * a + b * b * b + c * c * c) {
          console.log(i);
        }
      }

      9. 制作一个黑白棋棋盘（效果图见班群）
      <style>
        .row {
          width: 500px;
          font-size: 0;
        }
        span {
          width: 50px;
          height: 50px;
          display: inline-block;
        }
      </style>
      for (var i = 1; i <= 5; i++) {
        document.write('<div class="row">')
        if (i % 2 === 0) {
          for (var j = 1; j <= 5; j++) {
            if (j % 2 === 0) {
              document.write('<span style="background:#000"></span>')
            } else {
              document.write('<span style="background:#fff"></span>')
            }
          }
        } else {
          for (var j = 1; j <= 5; j++) {
            if (j % 2 === 0) {
              document.write('<span style="background:#fff"></span>')
            } else {
              document.write('<span style="background:#000"></span>')
            }
          }
        }
        document.write('</div>')
      }      

      // 答案
      document.write('<table cellspacing=0 style="width:300px;height:300px">')
      for (var i = 0; i < 5; i++) {
        document.write('<tr>')
        for (var j = 0; j < 5; j++) {
          // i是行，j是列，行与列奇偶同行
          // i % 2 == 0 && j % 2 == 0 奇数行和奇数列填色
          // i % 2 != 0 && j % 2 != 0 偶数行和偶数列填色
          if (i % 2 == 0 && j % 2 == 0 || i % 2 != 0 && j % 2 != 0){
            document.write('<td style="background: #000"></td>')
          }else{
            document.write('<td></td>')
          }
        }
        document.write('</tr>')
      }
      document.write('</table>')

      10.(提高题)将100元整钞换成20元、10元、5元、2元、1元零钱，要求零钱总张数为30张，求有多少种换法？假如要求每种纸币必须至少有一张，又有多少种换法呢？
      var a, b, c, d, e;
      var num = 0;
      for (a = 0; a <= 100; a++) {
        for (b = 0; b <= (100 - a) / 2; b++) {
          for (c = 0; c <= (100 - a - 2 * b) / 5; c++) {
            for (d = 0; d <= (100 - a - 2 * b - 5 * c) / 10; d++) {
              for (e = 0; e <= (100 - a - 2 * b - 5 * c - 10 * d) / 20; e++) {
                if (a + b + c + d + e == 30 && (a + 2 * b + c * 5 + d * 10 + e * 20 == 100)){
                  num++;
                }
              }
            }
          }
        }
      }
      console.log(num);
    */
  </script>
</body>

</html>